import { readFile } from "fs";

/* addBot 需要的 bot module */
interface BotModule {
    /* 主代码文件 */
    main: string;
    /* sourceMap 文件 */
    "main.js.map": string;
}

/**
 * async 版本的 readFile
 *
 * @param path 要读取的文件
 * @returns 该文件的字符串内容
 */
const readCode = async function (path: string): Promise<string> {
    return new Promise((resolve, reject) => {
        readFile(path, (err, data) => {
            if (err) return reject(err);
            resolve(data.toString());
        });
    });
};

/**
 * 全局唯一的 dist 代码模块
 */
let myCode: BotModule;

/**
 * 获取自己的全量代码模块
 */
export const getMyCode = async function (): Promise<BotModule> {
    if (myCode) return myCode;

    const [main, map] = await Promise.all([
        readCode("dist/main.js"),
        readCode("dist/main.js.map.js")
    ]);

    myCode = { main: main, "main.js.map": map };
    return myCode;
};
